Open topic with navigation
Moving Threads
Moving a thread is equivalent to resetting its processor affinity. As
described in Suspending
Threads Before Setting Their Affinity, running threads must first
be suspended before their affinity may be reset.
Threads That Cannot Be Moved
There are two cases where threads cannot be moved:
- Threads that use Floating
Point, MMX,
AVX, or SSE
registers can be moved until the first floating
point, MMX, AVX, or SSE instruction is called, after which you cannot move
them.
NOTE: When you include the C Runtime,
some FPU, MMX, AVX, and SSE registers may be used even though you have not explicitly
called them, causing thread migration to not be allowed.
- Interrupt Service Threads (ISTs) and Timer Handler Threads (THTs) cannot be moved
from the processor on which they were started. Additionally, unlike other
threads, these two thread types are not restricted to running on a processor
within their parent process' mask. This means that, if the parent's mask
changes after the IST or timer handler thread has started, the thread
could potentially be running on a processor outside of its parent's mask.
In general, this does not cause any problems, however, you may see evidence
of the situation when viewing thread and process information in RTSS
Object Viewer.